package vue;

import controller.ControllerAccueil;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.swing.ImageIcon;

/**
 * Classe VueAccueil qui gère les composants de la vue ouverte à l'ouverture
 * de l'application
 * @author Florian MININ & Khémon BEH
 */
public class VueAccueil extends JFrame {

    /**
     * Attributs
     */
    private static ResourceBundle bundle;
    private JPanel pnlPrincipal;
    private JButton btnLangueUK, btnLangueFR, btnPalmares,
            btn1vs1, btn1vsCPU;
    /**
     * Variable d'instances
     */
    public final static String BTN_FR = "FR";
    public final static String BTN_EN = "EN";
    public final static String BTN_1VS1 = "1vs1";
    public final static String BTN_1VSCPU = "1vsCPU";
    public final static String BTN_PALMARES = "Palmares";

    /**
     * Constructeur de la vue
     */
    public VueAccueil(Locale locale) {
        setLocale(locale);
        bundle = ResourceBundle.getBundle("international.international", locale);
    
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 365, 312);
        pnlPrincipal = new JPanel();
        pnlPrincipal.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(pnlPrincipal);
        GridBagLayout gbl_contentPane = new GridBagLayout();
        gbl_contentPane.columnWidths = new int[]{126, 0, 67, 60, 0};
        gbl_contentPane.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        pnlPrincipal.setLayout(gbl_contentPane);

        btnLangueFR = new JButton();
        btnLangueFR.setBorderPainted(false);
        btnLangueFR.setContentAreaFilled(false);
        btnLangueFR.setIcon(new ImageIcon("img/Flag-of-France-32.png"));
        GridBagConstraints gbc_btnLangueFR = new GridBagConstraints();
        gbc_btnLangueFR.insets = new Insets(0, 0, 5, 5);
        gbc_btnLangueFR.gridx = 2;
        gbc_btnLangueFR.gridy = 0;
        pnlPrincipal.add(btnLangueFR, gbc_btnLangueFR);


        btnLangueUK = new JButton();
        btnLangueUK.setBorderPainted(false);
        btnLangueUK.setContentAreaFilled(false);
        btnLangueUK.setIcon(new ImageIcon("img/flagUK.png"));
        GridBagConstraints gbc_btnLangueUK = new GridBagConstraints();
        gbc_btnLangueUK.insets = new Insets(0, 0, 5, 0);
        gbc_btnLangueUK.gridx = 3;
        gbc_btnLangueUK.gridy = 0;
        pnlPrincipal.add(btnLangueUK, gbc_btnLangueUK);

        btn1vs1 = new JButton("1 vs 1");
        GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
        gbc_btnNewButton.fill = GridBagConstraints.HORIZONTAL;
        gbc_btnNewButton.insets = new Insets(0, 0, 5, 5);
        gbc_btnNewButton.gridx = 1;
        gbc_btnNewButton.gridy = 2;
        pnlPrincipal.add(btn1vs1, gbc_btnNewButton);

        btn1vsCPU = new JButton("1 vs CPU");
        GridBagConstraints gbc_btn1vsCPU = new GridBagConstraints();
        gbc_btn1vsCPU.fill = GridBagConstraints.BOTH;
        gbc_btn1vsCPU.insets = new Insets(0, 0, 5, 5);
        gbc_btn1vsCPU.gridx = 1;
        gbc_btn1vsCPU.gridy = 4;
        pnlPrincipal.add(btn1vsCPU, gbc_btn1vsCPU);

        btnPalmares = new JButton(bundle.getString("palmares"));
        GridBagConstraints gbc_btnPalmares = new GridBagConstraints();
        gbc_btnPalmares.fill = GridBagConstraints.HORIZONTAL;
        gbc_btnPalmares.insets = new Insets(0, 0, 5, 5);
        gbc_btnPalmares.gridx = 1;
        gbc_btnPalmares.gridy = 6;
        pnlPrincipal.add(btnPalmares, gbc_btnPalmares);

        //Action command
        btnLangueFR.setActionCommand(BTN_FR);
        btnLangueUK.setActionCommand(BTN_EN);
        btn1vs1.setActionCommand(BTN_1VS1);
        btn1vsCPU.setActionCommand(BTN_1VSCPU);
        btnPalmares.setActionCommand(BTN_PALMARES);

        pack();
        setTitle("Yams");
        setPreferredSize(new Dimension(50, 50));
        setResizable(false);
        setLocationRelativeTo(null);
    }

    /**
     * Méthode qui permet de changer la langue de la vue 
     * @param locale Locale correspondant a la langue de l'application
     */
    public void setLangueAccueil(Locale locale) {
        // On vérifie si on a selectionné une langue différente de la langue
        // actuelle.
        
        if (!bundle.getLocale().equals(locale)) {
            setLocale(locale);
            // on récupere le bundle correspondant a la nouvelle locale
            bundle = ResourceBundle.getBundle("international.international",
                    locale);

            // On modifie tous les champs pour qu'il prennent
            // la langue sélectionnée
            btnPalmares.setText(bundle.getString("palmares"));
        }
    }

    /**
     * Méthode d'abonnement des composants à un controleur
     * @param ctrl
     */
    public void abonneComposants(ControllerAccueil ctrl){
        btn1vs1.addActionListener(ctrl);
        btn1vsCPU.addActionListener(ctrl);
        btnLangueFR.addActionListener(ctrl);
        btnLangueUK.addActionListener(ctrl);
        btnPalmares.addActionListener(ctrl);
        addWindowListener(ctrl);
    }

    /**
     * Accesseur du bundle
     * @return
     */
    public ResourceBundle getBundle(){
        return bundle;
    }

    /**
     * Affiche le message d'erreur vers le fichier standard des erreurs
     * lorsque il n'y a aucune données dans la table de palmares.
     */
    public void afficheErreurDonnees() {
        System.err.println(getBundle().getString("erreur_acces_donnees"));
    }
}
